//
// Created by TNJ on 2021/6/9.
//

#ifndef STACK_STACK_H
#define STACK_STACK_H

#include <stdbool.h>
#include "list.h"

#define NAN (0xFFFFFFFE)

typedef struct stack{
    int size;
    int cap;
    int front;
    int *arr;
}_stack_t;

extern void stack_init(_stack_t *s, int capacity);
extern void stack_push(_stack_t *s, int data);
extern int stack_pop(_stack_t *s);
extern int stack_size(_stack_t *s);
extern bool stack_is_empty(_stack_t *s);
extern bool stack_is_full(_stack_t *s);
extern void stack_destroy(_stack_t *s);

typedef list_t stack_linked_t;  //自定义栈数据类型

extern stack_linked_t *new_stack_linked_node(int data);  //新建一个栈结点
extern void stack_linked_push(stack_linked_t **s, int data);  //入栈
extern int stack_linked_pop(stack_linked_t **s);  //出栈
extern int stack_linked_size(stack_linked_t *s);  //获取栈大小
extern bool stack_linked_is_empty(stack_linked_t *s);  //判断栈是否为空
extern void stack_linked_destroy(stack_linked_t **s);  //销毁栈

#endif //STACK_STACK_H
